<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    const obj = {
        name:"obj",
        abc:"hahaha",
        _msg: 123123
    };

    // 可以用来给指定对象添加属性，并对当前属性进行配置
    // 参数1：要操作的对象
    // 参数2：要设置的属性
    // 参数3：配置对象（对象的键作为配置项）
        // 配置项有哪些（键有哪些）
        // value：配置当前对象的当前属性的值
        // writable：配置当前对象的当前属性是否可修改
        // enumerable：配置当前对象的当前属性是否可枚举
        // get：函数值，用来配置当前对象的当前属性的访问器
        // set：函数值，用来配置当前对象的当前属性的控制器
    Object.defineProperty(obj, "msg", {
        // value: "hello",
        // writable: true,
        enumerable: false,
        get:function(){
            // 访问器
            return otherObj._msg;
        },
        set:function(v){
            // 控制器
            obj._msg = v;
        }
    })

    obj.msg = "world";

    // console.log(obj.msg)

    // for(let i in obj){
    //     console.log(i);
    // }

    // console.log(obj)


    // ==========

    // 老对象，要劫持的对象
    const static = {
        msg:"hello"
    }

    // 新对象，劫持之后的对象
    const obj2 = {}

    Object.defineProperty(obj2, "msg", {
        get(){
            console.log("访问了msg")
            return static.msg
        },
        set(v){
            console.log("修改了msg")
            static.msg = v
        }
    })


    obj2.msg = "world"

    console.log(obj2.msg);


    console.log(obj2);




    
</script>
</html>